查看原文
其他

ASP.NET Core 自动刷新JWT Token

My IO DotNet 2022-07-19

前言


为了安全性考虑,我们可以设置JWT Token较短的过期时间,但是这样会导致客户端频繁地跳到登录界面,用户体验不好。正常解决办法是增加refresh_token,客户端使用refresh_token去主动刷新JWT Token。这里介绍一种变通的方式,自动刷新JWT Token


原理


我们读取每个请求的Authorization头,获得当前请求的JWT Token。检查当前token的过期时间,如果在30分钟以内,那么我们就生成一个具有新过期时间的JWT Token,并通过X-Refresh-Token头返回。客户端检查到X-Refresh-Token头,就将保存的JWT Token替换掉,下次发送请求就是用最新的token了。


实现


创建一个Middleware,它的作用是检查JWT Token过期时间并生成新token返回:

public async Task InvokeAsync(HttpContext context)  
{  
    JwtSecurityToken token = null;  
    string authorization = context.Request.Headers["Authorization"];  
  
    if (!string.IsNullOrEmpty(authorization)  
 && authorization.StartsWith("Bearer "))  
        token = new JwtSecurityTokenHandler().  
ReadJwtToken(authorization.Substring("Bearer ".Length));  
  
    //刷新Token  
    if (token != null   
&& token.ValidTo > DateTime.UtcNow   
&& token.ValidTo.AddMinutes(-30) <= DateTime.UtcNow)  
    {  
        context.Response.Headers.Add("X-Refresh-Token",  
 await RefreshTokenAsync(token));  
    }  
  
    await _next(context);  
}  

结论

当然,推荐大家尽量使用refresh_token的方式,毕竟这样安全性会更高一些。

- EOF -

推荐阅读  点击标题可跳转
C# 打印PDF文档的10种方法部署到 IIS,更新项目时"文件夹正在使用"错误.NET 6.0 自研轻量级ORM框架


看完本文有收获?请转发分享给更多人

推荐关注「DotNet」,提升.Net技能 

点赞和在看就是最大的支持❤️

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存